/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.cje.basic.app.listener;

import com.chframework.boot.core.pojo.KeyValuePair;
import com.chframework.json.JacksonHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 系统配置变更监听-事件通知
 */
@Slf4j
@Component
// 建议使用 com.chframework.cloud.web.support.EnvironmentChangedEvent 而非 org.springframework.cloud.context.environment.EnvironmentChangeEvent
// 通过对比可知，Nacos为我们提供的com.alibaba.nacos.api.config.ConfigChangeEvent功能更为强大，更容易有效降低编码复杂度
// public class ConfigChangedHandler implements ApplicationListener<EnvironmentChangedEvent> {
public class EnvironmentChangeHandler implements ApplicationListener<EnvironmentChangeEvent> {

    @Resource
    private ConfigurableEnvironment environment;

    @Override
    public void onApplicationEvent(@NonNull EnvironmentChangeEvent event) {
        List<KeyValuePair> changedProperties = new ArrayList<>();
        for (String key : event.getKeys()) {
            changedProperties.add(new KeyValuePair(key, environment.getProperty(key)));
        }
        log.debug("系统配置变更详情：{}", JacksonHelper.to(changedProperties));
    }

}
